package sum.book.common.feign.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;


public class OAuth2FeignRequestInterceptor implements RequestInterceptor {

    private static final String HEADER_INTERIOR = "INTERIOR";

    private static final String HEADER_VALUE = "TRUE";

    @Override
    public void apply(RequestTemplate requestTemplate) {

        // 标识他是一一个内部的Feign内部请求, 之后会在web拦截器中被拦截,拦截器是自己定义的,如果拦截到的请求包含这个标识,则直接请求资源 不走任何的过滤器
        requestTemplate.header(HEADER_INTERIOR, HEADER_VALUE);

        //  下面的这个方法 可以用来处理Feign请求时 Token丢失的问题 , 此处是用于给Feign的请求头添加Token操作
        //  但是该操作被取消 原因是因为 当前资源服务器都是处在内网环境下,不需要进行Token的校验,
        //  另外, 当初为了整合 feign+hystrix出现了这里 attributes获取为空的问题 ,为了解决这个问题 我自定义了 Hystrix并发策略(HystrixConcurrencyStrategy)
        //  在并发策略中 将 RequestContextHolder 作为成员变量传递给 TheadLocal中的线程中 这样才使得  RequestContextHolder的值 可以在上下文中获取到
        //  故: 可以注释掉这块代码了,已经用不上了
        //  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        //  if (attributes != null) {
        //      HttpServletRequest request = attributes.getRequest();
        //      添加token-- 内部请求无需传递Token 内网环境下
        //      requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
        //
        //  }
    }
}
